#define DEBUG
#include <cstdio>
#include <cmath>
#include <algorithm>

using namespace std;

typedef long long ll;
typedef long double ld;
const int maxn=1000, maxm=1000;

class Point {
public:
  ll x, y;
  ld ang, p;

  static bool cmpByAng(Point &a, Point &b) {
    return a.ang<b.ang;
  }

  ld getAng(Point a) {
    return ang=atan2(y-a.y, x-a.x);
  }
};

ld solve(Point &a, int n, Point p[]) {
  for (int i=1; i<=n; i++) {
    p[i].getAng(a);
  }
  sort(p+1, p+n+1, Point::cmpByAng);

  ld ans=1, now=1;
  static Point t[2*maxn+1];
  for (int i=1; i<=n; i++) {
    now *= (1-p[i].p);
    t[i] = t[n+i] = p[i];
    t[n+i].ang += 2*M_PI;
  }
  ans -= now;
  for (int i=1, j=1; i<=n; i++) {
    for (; t[j].ang<=t[i].ang+M_PI; j++) {
      now /= (1-t[j].p);
    }
    now *= t[i].p;
    ans -= now;
    now *= (1-t[i].p)/t[i].p;
  }
  return ans;
}

int main() {
#ifdef DEBUG
  freopen("src.in", "r", stdin);
  freopen("src.out", "w", stdout);
#endif

  static Point room[maxm+1], guy[maxn+1];
  int n, m;
  scanf("%d %d", &n, &m);
  for (int i=1; i<=n; i++) {
    scanf("%lld %lld", &guy[i].x, &guy[i].y);
  }
  for (int i=1; i<=m; i++) {
    scanf("%lld %lld %LF", &room[i].x, &room[i].y, &room[i].p);
  }

  ld ans=0;
  for (int i=1; i<=n; i++) {
    ans += solve(guy[i], m, room);
  }
  printf("%.10LF", ans);

  fclose(stdin);
  fclose(stdout);
  return 0;
}
